import bianliang from "./bianliang.js";
import BackGround from "./BackGround.js";
import Hero from "./Hero.js";
import Enemy from "./Enemy.js";
import Tool from "./Tool.js";
import Boom from "./Boom.js";

//第一件事情,先获取画布(模拟屏幕)
var game = document.querySelector("#game");
//第二件事情,在这里获取绘画用的笔
var ctx = game.getContext("2d");

bianliang.loading(function() {
	//游戏资源加载好了以后要做的事情
	//如果游戏资源加载好了，我们就让“开始游戏”按钮显示出来
	document.querySelector(".btnStart").style.display = "inline-block";
	document.querySelector(".btnStart").onclick = function() {
		startGame();
		document.querySelector(".startDiv").style.display = "none";
	}
});

//定义一个开始游戏的方法， 与loading相对应
var bg = null;	//定义一个背景变量
var hero = null;
var timer0 = null;	//第一个定时器
var timer1 = null;	//第二个定时器
function startGame() {
	bg = new BackGround();
	hero = new Hero();
	timer0 = setInterval(function() {
		bg.draw(ctx);	//画背景
		if (hero != null) {
			hero.draw(ctx);	//画玩家飞机
		}
		addEnemy();		//检测并添加敌人的飞机
		//addTool();	//检测并添加道具
		isCrash();

		//遍历所有的子弹，把所有的子弹画出来
		for (var i = 0; i < bianliang.bulletList.length; i++) {
			bianliang.bulletList[i].draw(ctx);
		}
		
		//画出敌人的飞机
		for (var i = 0; i < bianliang.enemyList.length; i++) {
			bianliang.enemyList[i].draw(ctx);
		}
		
		//画出道具
		for (var i = 0; i < bianliang.toolList.length; i++) {
			bianliang.toolList[i].draw(ctx);
		}
		
		//画出爆炸动画
		for (var i = 0; i < bianliang.boomList.length; i++) {
			bianliang.boomList[i].draw(ctx);
		}
		
		//画出游戏得分
		ctx.fillStyle = "red";
		ctx.font = "16pt 微软雅黑";
		ctx.fillText("score："+bianliang.score, 20, 20);
	}, 50);
	
	//这个定时器是专门用于玩家飞机发射子弹的
	timer1 = setInterval(function() {
		hero.fire();
		addTool();	//检测并添加道具
	}, 250);//一秒钟发射四颗子弹
}

game.onmousemove = function(event) {
	if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) {
		game.addEventListener("touchmove", function(e) {
             if(e.touches.length > 1 || e.scale && e.scale !== 1) return;
			  e.preventDefault();
             if (hero != null) {
                 hero.x = e.touches[0].pageX;
                 hero.y = e.touches[0].pageY;
             }
         });
	} else {
	//console.log(event);
	if (hero != null) {
		var x = event.clientX - game.getBoundingClientRect().left;
		var y = event.clientY - game.getBoundingClientRect().top;
		if (x >= 480 - hero.width) {
			x = 480 - hero.width;
		}
		if (y >= 850 - hero.height) {
			y = 850 - hero.height;
		}
		hero.x = x;
		hero.y = y;
	}
	}
}

//添加敌人飞机的方法
function addEnemy() {
	//最多8架敌机
	if (bianliang.enemyList.length < 8) {
		var count = 8 - bianliang.enemyList.length;//计算还差多少架飞机
		for (var i = 0; i < count; i++) {
			bianliang.enemyList.push(new Enemy());
		}
	}
}

function addTool() {
	if (bianliang.toolList.length < 1) {
		//说明没有道具，这时可以随机产生道具
		var temp = parseInt(Math.random() * 100);
		if (temp > 97) {
			bianliang.toolList.push(new Tool());
		}
	}
}

//检测两个物体是否相交
function chechCrash(a, b) {
	if (a != null && b != null) {
		if (a.x + a.width < b.x || b.x + b.width < a.x || a.y + a.height < b.y || b.y + b.height < a.y) {
		//代表没有相交
		return false;
	} else {
		return true;
	}
	}
	
}

//检测哪些东西相交
function isCrash() {
	//	--------------第一种情况：玩家飞机与道具发生相交----------
	if (bianliang.toolList.length > 0) {
		for (var i = 0; i < bianliang.toolList.length; i++) {
			var result = chechCrash(hero, bianliang.toolList[i]);
			if (result) {
				if (bianliang.toolList[i].type == 0) {
					hero.isTwo = true;
					setTimeout(function() {
						hero.isTwo = false;	//10秒以后将子弹恢复成单排
					}, 10000);
				} else if (bianliang.toolList[i].type == 1) {
					//说明是原子弹
					for (var j = bianliang.enemyList.length - 1; j >= 0; j--) {
						bianliang.enemyList[j].life = 0;
						bianliang.enemyList[j].isDie();
					}
				}
				bianliang.toolList.splice(i, 1);
			}
		}
	}
	
	//	--------------第二种情况：玩家飞机的子弹与敌机发生相交----------
	/*
		倒着遍历：如果正着去遍历索引，后期集合的长度发生改变时，它们的索引会改变
	*/
	for (var i = bianliang.bulletList.length - 1; i >= 0; i--) {
		for (var j = bianliang.enemyList.length - 1; j >= 0; j--) {
			result = chechCrash(bianliang.bulletList[i], bianliang.enemyList[j]);
			if (result) {
				bianliang.bulletList.splice(i, 1);
				bianliang.enemyList[j].life--;
				bianliang.enemyList[j].isDie();
				break;
			}
		}
	}
	
	//	--------------第三种情况：玩家飞机与敌机发生相交----------
	for (var i = bianliang.enemyList.length - 1; i >= 0; i--) {
		var result = chechCrash(bianliang.enemyList[i], hero);
		if (result) {
			var b = new Boom(hero.x, hero.y, 3);
			bianliang.boomList.push(b);
			hero = null;
			setTimeout(function() {
				clearInterval(timer0);
				clearInterval(timer1);
				document.querySelector(".center").innerText = bianliang.score;
				document.querySelector(".endDiv").style.display = "inline-block"
			},600);
		}
	}
}